/** 
 * 单例模式 
 * 目的： 全局只有一个对象
 * 应用场景： 避免重复新建，对象存在互相干扰
 * 
 */


/**
 * 单例模式的基本结构
 * 通过定义一个方法，使用时只允许通过此方法拿到存在内部的同一实例化对象
 */
let Singleton = function (name) {
    this.name = name
}
Singleton.getInstance = function (name) {
    if (this.instance) {
        return this.instance
    }
    return this.instance = new Singleton(name)
}



/**
 * 写一个全局数据存储对象
 * 需求：项目中有一个全局的数据存储者，这个存储者只能有一个，不然会需要进行同步，增加难度
 */

function store() {
    this.state = {}
    if (store.install) {
        return store.install
    }
    store.install = this
}

store.install = null
// 第一次实例化store之后   后面的实例只会返回 第一次的this对象
var a = new store()

var b = new store()
a.num = 5
console.log(b) // {num: 5}